統計的機械翻訳(SMT)とニューラル機械翻訳(NMT)って何ですか? - Qiita
/icons/hr.icon
近年の機械翻訳
近年ではニューラルネットワークを使った機械翻訳が多く登場しています。NMT(ニューラル機械翻訳)は2014年に提案され、あっという間に従来研究の精度を超えました。自然言語処理という分野自体もBERTやXLNetといったSOTAモデルが登場し、SOTA合戦が止まりません。
わからない of わからない
なお、ニューラルネットワークを使わず、統計的な情報を利用して翻訳する手法はSMT(統計的機械翻訳)、さらにそれを句で拡張したものをPBSMT(Phrase-Based SMT)と呼びます。
特定のルールに基づいて翻訳する手法はRMT(ルールベース)と呼ばれます。
参考
Google翻訳にも2016年にNMTが採用されました(GNMTと呼ばれます)
/icons/hr.icon
SMTとPBSMT(統計的機械翻訳)
SMTは学習データから統計モデルを学習し、統計モデルを翻訳器として機械翻訳を実現します。統計モデルは翻訳モデルと言語モデルに分かれ、それぞれ翻訳の確かさと文法の確かさを評価します。
要するに、大量の対訳文から統計モデルを作成し、確率の最も高い文を翻訳結果とするわけですね。
なるほど確率ね。
PBSMTはSMTが単語ごとに翻訳するために文脈情報を活用しにくいという問題を抱えていたため、フレーズ(句/部分単語列)を単位として翻訳するように拡張したモデルです。
言語モデル
言語モデルは言語らしさを確立としてモデル化します。例えば長さ$ Mの単語列 $ w_{1} ... w_{M}の生起確率は
$ P(w_{1},...,w_{M}) = \prod^{m}_{t=1}P(w_{t}|w_{1},...,w_{t−1})
と表せます。
m じゃなくて M では? $ \prod^{M}_{t=1}
N-gram言語モデルでは$ N番目の単語がその直前の$ N−1個の単語に依存すると仮定しています。すなわち言語モデルでは直前の単語の並びによってその文が自然か(自然であれば高い確率を出力)を評価します。
直前の単語の並びによってその文が自然か なるほどね
翻訳モデル
翻訳モデルは原言語$ f(入力側)と目的言語$ e(出力側)の意味的な等価性を確率的に評価します。
こっちは「意味が同じかどうか」という観点ね
アライメント(両フレーズの対応)を$ aとし、翻訳モデルを$ P(f|e)とすると
$ P(f|e) = \sum_{a}P(f,a|e) = \sum_{a}P(f|e,a)P(a|e)
となります。式変形にはベイズの定理を使っています。
翻訳確率
言語モデルと翻訳モデルを使って翻訳する確率(翻訳結果としてどれだけふさわしいか)を得られます。
「その文が自然か」と「入力文と意味が同じか」という両方で翻訳する確率を決めるってことね
翻訳確率を$ ê、原言語を$ f、目的言語を$ eとすると
$ ê = \argmax_{e}P(e|f)=\argmax_{e}P(f|e)P(e)
と表せます。ここで出てきた$ P(f|e)は翻訳モデル、$ P(e)は言語モデルです。$ \argmax_{e}f(x)は$ f(x)が最大となる$ xを返します。つまり$ P(f|e)P(e)が最大となる解をふさわしい翻訳結果として出力します。
入力(翻訳前の文字列)$ fに対して出力(翻訳語の文字列)$ eを選択する確率は...
「出力$ eに対して入力$ fがどの程度意味的に等価であるか」x「出力$ eの文がどの程度自然か」
もっと詳しくはこちら
/icons/hr.icon
NMT(ニューラル機械翻訳)
NMTは1つのニューラルネットワークを用意することで、訓練と翻訳を完結させることができます。
1つの ... ?
seq2seq
ここではNMTの例として、最も広く知られているであろうseq2seq(Encoder-Decoderモデル)を紹介します。seq2seqは入力文を変換するEncoder、出力文を生成するDecoder(と、入力文のどこに注視するかを決定するAttention)で構成されています。
Encoderでは入力となる文字列を単語ごとに分散表現というベクトルに変換します(embedding)。
Encoderでなにをやってるか、という話。
これにより、ベクトルに変換することで定量的に単語が扱える(数値として単語の意味を捉えられる)ようになります。
なるほど?
分散表現を獲得するツールにはWord2Vecがあります。分散表現は通常、大規模なコーパスから学習することも多いですが、ネットワーク内で同時に分散表現を学習することもあります。
embeddingされた単語はRNNに取り込まれます。RNNについて詳しい説明は省略しますが、RNNはループを持つニューラルネットワークであり、時系列データを扱えます。
文字列は時系列データです(並び順が存在する)。機械翻訳においてRNNは入力単語とその前後の単語との結びつきを考慮するために使われます。
並び順が存在するデータを「時系列データ」と称すると、異論出てきそう
入力単語とその前後の単語との結びつきを考慮するために使われます。 どういう目的で使われいるのか書かれているの感謝
DecoderはEncoderと同様にRNNで構成されますが、RNNの出力はベクトルであるため、確率の形としてsoftmax関数で正規化します。すなわちsoftmax関数で出力された最も高い確率の単語が殆ど翻訳文として採用されます。
Decoderの話。ほぼ省略されているなぁ。
Attentionはseq2seqが提案されたよりも後に出てきた機構ですが、近年の系列変換モデルでは使うのが当然ですので、ここではまとめてseq2seqと呼びます。
何度か目にしたけど、ちゃんと理解していないやつ。
通常のRNNは系列データが長くなるほど初期の入力がDecoderに伝搬しづらくなるという欠点がありました。何故なら通常、EncoderからDecoderへの伝搬は最後の状態出力のみを使うからです。
そりゃそうだよな〜、という感じがする
入力系列$ x_{1},...,x_{I}に対して各時刻で符号化されたベクトル$ h_{1}^{(s)},...,h_{I}^{(s)}はRNNの遷移関数を$ Ψ^{(s)}とすると次のように再帰的に計算できます。
$ h^{(s)}_{i} = Ψ_{(s)}(x_{i},h^{(s)}_{i−1})
すなわちDecoderへ伝搬するのは$ h_{I}^{(s)}であり、長さ$ Iの情報が固定長ベクトルに格納されていることになります。
この問題を解決するためにEncoderの各時刻の中間ベクトル(隠れ状態ベクトル)の重み付き平均を計算します。これはsoft attention(ソフト注意機構)と呼ばれます。
この問題 って、どの問題?
attentionの種類
参考